Programmiervorlage

Die EasyTools Vorlage wird als Programmierbeispiel mit EasySightPro® ausgeliefert und befindet sich im VisionPro Werkzeugkasten unter "EasySightPro Tools" - "EasyTool Template".

EasyTools - Programmierung

Es wird empfohlen die Werkzeug Vorlage als Basis für ein neues Werkzeug zu benutzen.

Wichtige Script Referenzen (DLLs):

%ESP_ROOT%\Reliste.VisionPro.Extensions.dll

System.Core.dll

Beide Script Referenzen sind im Template bereits eingefügt!

Alle notwendigen Funktionen werden über die DLL Reliste.Vision.Extensions zur Verfügung gestellt.

Das Objekt EasyToolContainer übernimmt die Implementierung aller notwendigen Funktionen für die EasyTool Funktionalitäten.

Kopieren
//Using Statement für die RELISTE Tools
using Reliste.VisionPro.Extensions;

public class CogToolBlockSimpleScript : CogToolBlockAdvancedScript
{
  //Erzeuge den Tool Container -> Dieser wird in Initialize() nochmals initialisiert
  Reliste.VisionPro.Extensions.EasyToolContainer easyToolContainer = new Reliste.VisionPro.Extensions.EasyToolContainer();
  
  /// <summary>
  /// Called when the parent tool is run.
  /// Add code here to customize or replace the normal run behavior.
  /// </summary>
  /// <param name="message">Sets the Message in the tool's RunStatus.</param>
  /// <param name="result">Sets the Result in the tool's RunStatus</param>
  /// <returns>True if the tool should run normally,
  ///          False if GroupRun customizes run behavior</returns>
  public override bool GroupRun(ref string message, ref CogToolResultConstants result)
  {
    //Erzeuge einen neuen Record und lösche die Graphics ab
    easyToolContainer.CreateNewRecord(this.Inputs.InputImage);

    //Prüfe Inputs auf Gültigkeit
    easyToolContainer.ToolBlockInputInRange(RelDotNet.nameof(() => this.Inputs.PARAM_Schwellenwert), 0, 255);
    easyToolContainer.ToolBlockInputInRange(RelDotNet.nameof(() => this.Inputs.PARAMA_Min_Pixels), 1, 10000000);
    
    //Setze Ausgänge zurück
    int numBlobs = 0;
    double area = 0;
    bool passed = false;
    this.Outputs.RESULT_Anzahl = numBlobs;
    this.Outputs.RESULTA_Groesste_Flaeche = area;
    this.Outputs.Passed = passed;
    
    if (this.Inputs.Found)
    {
    
      //Führt alle Werkzeuge aus
      foreach(ICogTool tool in Tools)
        RunTool(tool, ref message, ref result);
  
      //Extrahiere Einheit, falls es eine Kalibrierung gibt
      //unit kann dann für die Anzeige der Einheit in der message verwendet werden
      //string unit = easyToolContainer.GetUnitFromImage(this.Tools.CogBlobTool.InputImage);
      
      //Fragt die Ergebnisse ab
      if ( this.Tools.Suchregion.Results != null )
      {
        //Abfragen der Anzahl an Blobs
        numBlobs = this.Tools.Suchregion.Results.GetBlobs().Count;
        area = this.Tools.Suchregion.Results.GetBlobs()[0].Area;
        
        //Prüfen, ob IO oder NIO
        if ( numBlobs >= this.Inputs.THRESHOLD_Anzahl_Min )
        {
          //IO Fall
          message = string.Format(easyToolContainer.GetLocalizedText("Anzahl: {0}", "Number: {0}"), numBlobs);
          passed = true;
        }
        else
        {
          //NIO Fall
          result = CogToolResultConstants.Reject;
          message = string.Format(easyToolContainer.GetLocalizedText("Außerhalb der Toleranz! Anzahl: {0}", "Out of range! Number: {0}"), numBlobs);
        }
      }
      else
      {
        //Ablauf fehlerhaft
        result = CogToolResultConstants.Error;
        message = easyToolContainer.GetLocalizedText("Fehler", "Error");
      }
      
      //Blob Overlays hinzufügen
      easyToolContainer.AddBlobToolResultToOverlay(this.Tools.Suchregion);
      
      //Füge Suchregion als Overlay hinzu
      CogColorConstants resultColor = result == CogToolResultConstants.Accept ? CogColorConstants.Green : CogColorConstants.Red;
      if (result != CogToolResultConstants.Accept || (bool)easyToolContainer.GetUserDataVariable("alwaysShowSearchRegion"))
        easyToolContainer.AddRegion(this.Tools.Suchregion.Region, resultColor);
    }
    else
    {
      result = CogToolResultConstants.Error;
      message = easyToolContainer.GetLocalizedText("Positionsreferenz nicht gefunden!", "Position reference not valid!");
    }

    //Synchronisiert alle Grafiken in das Graphics Array
    easyToolContainer.Run(ref message, ref result);
    
    //Beschreibe Ausgänge
    this.Outputs.RESULT_Anzahl = numBlobs;
    this.Outputs.RESULTA_Groesste_Flaeche = area;
    this.Outputs.Passed = passed;

    return false;
  }
  
  #region ModifyCurrentRunRecord
  
  public override void ModifyCurrentRunRecord(ICogRecord currentRecord)
  {    
    //Erstellt den CurrentRecord zum Verändern der Suchregion
    easyToolContainer.CreateCurrentRunRecord(ref currentRecord, this.Tools.Suchregion);
        
    base.ModifyCurrentRunRecord(currentRecord);
  }
  #endregion

  #region ModifyLastRunRecord

  public override void ModifyLastRunRecord(ICogRecord lastRecord)
  {
    //Erstellt den LastRunRecord mit 
    easyToolContainer.CreateLastRunRecord(ref lastRecord);
  }

  #endregion
  
  #region When the Script is Initialized
  /// <summary>
  /// Perform any initialization required by your script here
  /// </summary>
  /// <param name="host">The host tool</param>
  public override void Initialize(Cognex.VisionPro.ToolGroup.CogToolGroup host)
  {
    // DO NOT REMOVE - Call the base class implementation first - DO NOT REMOVE
    base.Initialize(host);

    //Initialisiere den Tool Container
    easyToolContainer.Init(host as CogToolBlock);
    easyToolContainer.CreateUserDataVariable("alwaysShowSearchRegion", false); //Legt fest, ob der Suchbereich auch angezeigt wird, wenn das Segment i. O. wurde

  }
  #endregion
}